#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <functional>
#include <vector>

void hander(int sig)
{
    std::cout << "sig" << sig << std::endl;
    signal(2, SIG_DFL);//SIG_DFL的含义是恢复默认信号设置default
    std::cout << "恢复处理动作" << std::endl;
}

int main()
{
    signal(2, hander);
    while(1)
    {
        sleep(1);
        std::cout << "." << std::endl;
    }
    return 0;
}

// int cnt = 0;

// using func_t = std::functional<void()>;
// std::vector<func_t> funcs;

// void handler(int sig)
// {
//     std::cout << "我收到了一个信号" << sig  << "cnt" << cnt << std::endl;
//     alarm(1);
// }

// int main()
// {
//     alarm(1);//借由操作系统之手，让进程在一秒钟后收到信号
//     signal(SIGALRM, handler);

//     //操作系统中有许多闹钟，操作系统的管理方式是先描述后组织，用一个结构体
//     //链表存放这些信息，关于时间，操作系统中有一个优先级队列（小堆）剩余时间
//     //最小值在上面

//     // for(int i = 1; i < 32; i++)
//     // {
//     //     signal(i, handler);
//     // }
//     while(1)
//     {
//         pause();//只有当信号被捕捉的时候才会允许进程继续运行
//         //本质是IO操作，像显示器文件写入，打印效率不高
//         std::cout << "pid" << getpid() << std::endl;
//         cnt++;
//     }
//     return 0;
// }